
typedef long long big_int;

class BaseVariable {
  virtual int to_int() const = 0;
  virtual float to_float() const = 0;
  virtual double to_double() const = 0;
  virtual big_int to_big_int() const = 0;
};

template<class T>
class Variable : BaseVariable {
public:
  typedef T value_type;

  Variable() : value_() {
  }

  explicit Variable(const value_type& x) : value_(x) {
  }

  virtual ~Variable() {
  }

  int to_int() const { 
    return static_cast<int>(value_); 
  }

  float to_float() const { 
    return static_cast<float>(value_); 
  }
  
  double to_double() const {
    return static_cast<double>(value_);
  }

  big_int to_big_int() const {
    return static_cast<big_int>(value_);
  }
private:
  value_type value_;
};

class vInt : public Variable {

};

